/*
 * rtostask.c
 *
 *  Created on: 2025年4月23日
 *      Author: lzf
 */
#include "rtostask.h"
#include "freertos/FreeRTOS.h"
#include "freertos/task.h"
#include "sdkconfig.h"
#include "nvs_flash.h"
#include "scan.h"
#include "lvgl_demo.h"
#include "led.h"
#include "esp_rtc.h"
#include "esp_log.h"
#include "at24c02.h"
#include "systick.h"
#include"wifi_sta.h"

/* LV_DEMO_TASK 任务 配置
 * 包括: 任务优先级 堆栈大小 任务句柄 创建任务
 */
#define LV_DEMO_TASK_PRIO   1               /* 任务优先级 */
#define LV_DEMO_STK_SIZE    5 * 1024        /* 任务堆栈大小 */
TaskHandle_t LV_DEMOTask_Handler;           /* 任务句柄 */
void lv_demo_task(void *pvParameters);      /* 任务函数 */

/* NET_TASK 任务 配置
 * 包括: 任务优先级 堆栈大小 任务句柄 创建任务
 */
#define NET_TASK_PRIO       2               /* 任务优先级 */
#define NET_STK_SIZE        5 * 1024        /* 任务堆栈大小 */
TaskHandle_t NETTask_Handler;               /* 任务句柄 */
void net_task(void *pvParameters);          /* 任务函数 */

/* LED_TASK 任务 配置
 * 包括: 任务优先级 堆栈大小 任务句柄 创建任务
 */
#define LED_TASK_PRIO       2               /* 任务优先级 */
#define LED_STK_SIZE        5 * 1024        /* 任务堆栈大小 */
TaskHandle_t LEDTask_Handler;               /* 任务句柄 */
void led_task(void *pvParameters);          /* 任务函数 */

void Freertos_task(void)
{
	    /* 创建LVGL任务 */
    xTaskCreatePinnedToCore((TaskFunction_t )lv_demo_task,          /* 任务函数 */
                            (const char*    )"lv_demo_task",        /* 任务名称 */
                            (uint16_t       )LV_DEMO_STK_SIZE,      /* 任务堆栈大小 */
                            (void*          )NULL,                  /* 传入给任务函数的参数 */
                            (UBaseType_t    )LV_DEMO_TASK_PRIO,     /* 任务优先级 */
                            (TaskHandle_t*  )&LV_DEMOTask_Handler,  /* 任务句柄 */
                            (BaseType_t     ) 0);                   /* 该任务哪个内核运行 */
    //     // /* 创建wifi测试任务 */
    xTaskCreatePinnedToCore((TaskFunction_t)net_task,         /* 任务函数 */
                                (const char *)"net_task",         /* 任务名称 */
                                (uint16_t)NET_STK_SIZE,           /* 任务堆栈大小 */
                                (void *)NULL,                     /* 传入给任务函数的参数 */
                                (UBaseType_t)NET_TASK_PRIO,       /* 任务优先级 */
                                (TaskHandle_t *)&NETTask_Handler, /* 任务句柄 */
                                (BaseType_t)0);                   /* 该任务哪个内核运行 */
     //     // /* 创建wifi测试任务 */
    xTaskCreatePinnedToCore((TaskFunction_t)led_task,         /* 任务函数 */
                                (const char *)"led_task",         /* 任务名称 */
                                (uint16_t)LED_STK_SIZE,           /* 任务堆栈大小 */
                                (void *)NULL,                     /* 传入给任务函数的参数 */
                                (UBaseType_t)LED_TASK_PRIO,       /* 任务优先级 */
                                (TaskHandle_t *)&LEDTask_Handler, /* 任务句柄 */
                                (BaseType_t)0);                   /* 该任务哪个内核运行 */                               
}

/**
 * @brief       LVGL运行例程
 * @param       pvParameters : 传入参数(未用到)
 * @retval      无
 */
void net_task(void *pvParameters)
{
   // wifi_scan();
    wifi_sta_init();
    while (1)
    {
        vTaskDelay(10);  /* 延时10毫秒 */
    }  
}
/**
 * @brief       LVGL运行例程
 * @param       pvParameters : 传入参数(未用到)
 * @retval      无
 */
void lv_demo_task(void *pvParameters)
{
     lvgl_demo();
    /*Create a GUI-Guider app */
    setup_ui(&guider_ui);
    custom_init(&guider_ui);

    while (1)
    {
     lv_timer_handler();             /* LVGL计时器 */
     vTaskDelay(10);  /* 延时10毫秒 */
    }
}
/* 定义字符数组用于显示星期 */
char *weekdays[] = {"Sunday", "Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday"};
 uint8_t g_text_buf[30] = {0};     /* 要写入到24c02的字符串数组 */
#define TEXT_SIZE   sizeof(g_text_buf)                  /* TEXT字符串长度 */
/**
 * @brief       LED运行例程
 * @param       pvParameters : 传入参数(未用到)
 * @retval      无
 */
 void led_task(void *pvParameters) {
	 uint8_t tbuf[40];
	 uint8_t datatemp[TEXT_SIZE];
	 int cntt = 0;
	 rtc_set_time(2025, 5, 10, 17, 27, 00); /* 设置RTC时间 */
	 while (1) {
		 if (Cycle_Timer_500MS()) {
			 LED_TOGGLE();
		 }
		 if (Cycle_Timer_1000MS()) {
			 rtc_get_time();
			 sprintf((char *)tbuf, "Time:%02d:%02d:%02d", calendar.hour,
					 calendar.min, calendar.sec);
			 sprintf((char *)tbuf, "Date:%04d-%02d-%02d", calendar.year,
					 calendar.month, calendar.date);
			 sprintf((char *)tbuf, "Week:%s", weekdays[calendar.week]);
			 ESP_LOGI("RTC", "%d/%d/%d %d:%d:%d %s", calendar.year,
					  calendar.month, calendar.date, calendar.hour,
					  calendar.min, calendar.sec, weekdays[calendar.week]);
			 sprintf((char *)g_text_buf, "ESP32-S3 IIC TEST %d", cntt++);
			 at24c02_write(0, (uint8_t *)g_text_buf,
						   TEXT_SIZE);			   /* 写数据到24C02 */
			 at24c02_read(0, datatemp, TEXT_SIZE); /* 从24C02读取数据 */
			// printf("%s\r\n", datatemp);
		 }
		 vTaskDelay(1); /* 延时10毫秒 */
	 }
 }